﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Zarzadzanie_Restautacja.Helpers;
using Zarzadzanie_Restautacja.Model;

namespace Zarzadzanie_Restautacja.Forms
{
    public partial class LoginForm : Form
    {
        public LoginForm()
        {
            InitializeComponent();
        }

        private void InitializeEvents()
        {
            this.tbHaslo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(KeyPressed);
            this.tbLogin.KeyPress += new System.Windows.Forms.KeyPressEventHandler(KeyPressed);
            this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(KeyPressed);
        }

        private void LoginForm_Load(object sender, EventArgs e)
        {

        }

        private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
        {

        }

        private void btnOK_Click(object sender, EventArgs e)
        {
            string login = this.tbLogin.Text;
            string hashedPassword = PasswordHelper.Hash(this.tbHaslo.Text);

            using (var context = new RestauracjaContext())
            {
                var users = context.Pracownicy.ToList();

                var loggedUser = context.Pracownicy.Where(prac =>
                    (prac.Nazwisko).Equals(login) &&
                    hashedPassword == prac.Haslo).FirstOrDefault();

                if (loggedUser == null)
                {
                    MessageBox.Show("Niepoprawne hasło lub login", "Błąd");
                }
                else
                {
                    AppSettings.LoggedUserId = loggedUser.Id;
                    AppSettings.LoggedUserFunction = loggedUser.Funkcja;

                    this.ShowMainWindow(loggedUser.FunkcjaEnum);
                }
            }
        }

        private void btnAnuluj_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void KeyPressed(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)ConstHelper.EnterKey)
            {
                this.btnOK_Click(sender, e);
            }
            if (e.KeyChar == (char)ConstHelper.EscapeKey)
            {
                this.btnAnuluj_Click(sender, e);
            }
        }

        /// <summary>
        /// Na podstawie funkcji jaką ma użytkownik, otwiera poszczegolne okno
        /// </summary>
        /// <param name="funkcja"></param>
        private void ShowMainWindow(Funkcje funkcja)
        {
            switch (funkcja)
            {
                case Funkcje.Admin:
                    //Form1 mainWindow = new Form1();
                    //mainWindow.ShowDialog();
                    WlascicielForm wlascicielForm = new WlascicielForm();
                    wlascicielForm.ShowDialog();
                    this.Close();
                    break;
                case Funkcje.Ksiegowa:
                    KsiegowaForm ksiegowaForm = new KsiegowaForm();
                    ksiegowaForm.ShowDialog();
                    this.Close();
                    break;
                case Funkcje.Kuchnia:
                    KuchniaForm kuchniaForm = new KuchniaForm();
                    kuchniaForm.ShowDialog();
                    this.Close();
                    break;
                case Funkcje.Obsluga:
                    KelnerForm kelnerForm = new KelnerForm();
                    kelnerForm.ShowDialog();
                    this.Close();
                    break;
            }
        }
    }
}
